ES8 ES2017
共享内和原子操作
由全局对象SharedArrayBuffer
和Atomics
实现,将数据存储在一块共享内存空间中,这些数据可在JS主线程
和web-worker线程
之间共享
字符串
String.padStart()
把指定字符串填充到字符串头部,返回新字符串
String.padEnd()
把指定字符串填充到字符串尾部,返回新字符串
对象
Object.getOwnPropertyDescriptors()
获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。
返回对象所有自身属性(非继承属性)的描述对象,对应hasOwnproperty()
,
Object.values()
返回以值组成的数组
Object.entries():list[key, value]
返回以键和值组成的数组,方便遍历数组(反观py早就可以这样遍历,甚至不用另外调用api,大大提升代码效率)
const capsion = {../}
for (let [key, value] of Obejct.entries(capsion)){
consolve({key, value})
}
SharedArrayBuffer
对象
SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,
/**
* @param {*} length 所创建的数组缓冲区的大小,以字节(byte)为单位。
* @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。
*/
new SharedArrayBuffer(10)
Atomics
对象
Atomics 对象提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作。
函数
Async/Await
使异步函数以同步函数的形式书写(Generator函数语法糖),原理是将Generator函数
和自动执行器spawn
包装在一个函数里。其返回值是一个Promise
,支持直接使用.then()
添加回调函数
- 基础使用
async funcrion func() {}
consty func = async function (){}
const func = async () => {}
// 习惯写vue的就很熟悉,OptionsApi就是遵从这个写法
const obj = {
async func(){}
}
// 类中使用
class Person{
async getAge() {}
}
Async函数
返回Promise对象
,可使用then()
添加回调函数内部
return返回值
会成为后续then()
的出参内部抛出错误会导致返回的Promise对象变为
rejected状态
,被catch()
接收到返回的Promise对象必须等到内部所有
await命令Promise对象
执行完才会发生状态改变,除非遇到return语句
或抛出错误
任何一个
await命令Promise对象
变为rejected状态
,整个Async函数
都会中断执行希望即使前一个异步操作失败也不要中断后面的异步操作
- 将
await命令Promise对象
放到try-catch
中await命令Promise对象
跟一个catch()
await命令Promise对象
可能变为rejected状态
,最好把其放到try-catch
中多个
await命令Promise对象
若不存在继发关系,最好让它们同时触发
await命令
只能用在Async函数
之中,否则会报错数组使用
forEach()
执行async/await
会失效,可使用for-of
和Promise.all()
代替可保留运行堆栈,函数上下文随着
Async函数
的执行而存在,执行完成就消失
- 语法参数